Custom Validation Rules তৈরি

Microsoft Technologies - এন্টিটি ফ্রেমওয়র্ক (Entity Framework) Entity Framework এ Validation এবং Data Annotation |
206
206

Entity Framework (EF) এবং ASP.NET Core তে Custom Validation Rules তৈরি করার মাধ্যমে আপনি আপনার মডেলগুলোর জন্য বিশেষ শর্ত বা কাস্টম ব্যতিক্রম নিয়ন্ত্রণ করতে পারেন। Entity Framework এবং ASP.NET Core মডেলগুলির জন্য Data Annotations এবং Fluent API ব্যবহার করে বৈধতা চেক করা যায়, তবে কিছু ক্ষেত্রে আপনার নিজস্ব কাস্টম লজিক প্রয়োগ করতে হয়, যা Custom Validation Attributes ব্যবহার করে করা যায়।


1. Data Annotation এর মাধ্যমে Custom Validation

Data Annotation এর মাধ্যমে আপনি মডেল প্রোপার্টির জন্য কাস্টম বৈধতা নির্ধারণ করতে পারেন। Entity Framework মডেল ক্লাসে Validation Attribute ব্যবহার করে আপনার কাস্টম শর্ত যোগ করা হয়।

কাস্টম ভ্যালিডেশন অ্যাট্রিবিউট তৈরি

আপনি যদি কোন নির্দিষ্ট শর্তের জন্য Custom Validation করতে চান, তাহলে ValidationAttribute ক্লাসটি ইনহেরিট করে একটি কাস্টম অ্যাট্রিবিউট তৈরি করতে হবে। এতে, আপনি IsValid মেথডে আপনার কাস্টম লজিক লেখেন।

উদাহরণ: Age ফিল্ডের জন্য একটি কাস্টম ভ্যালিডেশন তৈরি করা, যা 18 বছরের নিচে বয়সে অগ্রাহ্য করবে।

public class MinAgeAttribute : ValidationAttribute
{
    private readonly int _minAge;
    
    public MinAgeAttribute(int minAge)
    {
        _minAge = minAge;
    }

    public override bool IsValid(object value)
    {
        if (value == null)
        {
            return false;
        }

        int age = (int)value;

        return age >= _minAge;
    }
}

এখন, MinAge অ্যাট্রিবিউটটি ব্যবহার করে আপনার মডেল ফিল্ডের জন্য ভ্যালিডেশন তৈরি করা যাবে:

public class User
{
    public int UserId { get; set; }

    [MinAge(18, ErrorMessage = "Age must be at least 18.")]
    public int Age { get; set; }
}

এখানে, MinAge অ্যাট্রিবিউটটি নিশ্চিত করবে যে, Age প্রপার্টি ১৮ এর কম না হয়। যদি কম হয়, তবে একটি এরর মেসেজ প্রদান করা হবে।

কাস্টম ভ্যালিডেশন ব্যবহার করা

এখন, আপনি ModelState এর মাধ্যমে কাস্টম ভ্যালিডেশন চেক করতে পারেন:

var user = new User { Age = 16 };
var validationContext = new ValidationContext(user, null, null);
var validationResults = new List<ValidationResult>();

bool isValid = Validator.TryValidateObject(user, validationContext, validationResults, true);

if (!isValid)
{
    foreach (var validationResult in validationResults)
    {
        Console.WriteLine(validationResult.ErrorMessage);
    }
}

এখানে, Validator.TryValidateObject মেথডটি ব্যবহার করা হয়েছে, যা মডেলের উপর কাস্টম ভ্যালিডেশন প্রয়োগ করে এবং ফলস্বরূপ এরর মেসেজ পাবে।


2. Fluent API এর মাধ্যমে Custom Validation

যদি আপনি Fluent API ব্যবহার করে Entity Framework এ কাস্টম ভ্যালিডেশন করতে চান, তবে আপনাকে OnModelCreating মেথডে কাস্টম লজিক প্রয়োগ করতে হবে। তবে, Data Annotations দিয়ে যে কাস্টম ভ্যালিডেশন করা হয়, তা Fluent API তে প্রোগ্রাম্যাটিক্যালি সেলফ-ডিফাইন করা যায়।

উদাহরণ: পূর্বের MinAgeAttribute কাস্টম ভ্যালিডেশন Fluent API ব্যবহার করে ইমপ্লিমেন্ট করা:

public class ApplicationDbContext : DbContext
{
    public DbSet<User> Users { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>()
            .Property(u => u.Age)
            .HasCheckConstraint("CK_Age", "Age >= 18");
    }
}

এখানে, HasCheckConstraint ব্যবহার করে একটি SQL কন্ডিশন যুক্ত করা হয়েছে, যা নিশ্চিত করে যে Age প্রপার্টি ১৮ এর কম নয়।


3. Custom Validation for Complex Conditions

যখন আপনার ভ্যালিডেশন শর্ত আরও জটিল হয় এবং একাধিক প্রপার্টি একে অপরের ওপর নির্ভরশীল হয়, তখন আপনি কাস্টম লজিক ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি যদি চান যে StartDate এবং EndDate এর মধ্যে নির্দিষ্ট শর্তের ভিত্তিতে ভ্যালিডেশন হতে হবে, তাহলে আপনি তা কাস্টম ভ্যালিডেশনের মাধ্যমে করতে পারবেন।

উদাহরণ: StartDate এবং EndDate এর জন্য কাস্টম ভ্যালিডেশন

public class DateRangeAttribute : ValidationAttribute
{
    private readonly string _startDateProperty;
    private readonly string _endDateProperty;

    public DateRangeAttribute(string startDateProperty, string endDateProperty)
    {
        _startDateProperty = startDateProperty;
        _endDateProperty = endDateProperty;
    }

    public override bool IsValid(object value)
    {
        var startDateProperty = value.GetType().GetProperty(_startDateProperty);
        var endDateProperty = value.GetType().GetProperty(_endDateProperty);

        if (startDateProperty == null || endDateProperty == null)
        {
            return false;
        }

        var startDate = (DateTime?)startDateProperty.GetValue(value);
        var endDate = (DateTime?)endDateProperty.GetValue(value);

        if (startDate.HasValue && endDate.HasValue)
        {
            return startDate <= endDate;
        }

        return true;
    }
}

এখানে, DateRangeAttribute অ্যাট্রিবিউটটি নিশ্চিত করে যে, StartDate এর আগে EndDate হবে না।

ব্যবহার:

public class Event
{
    public int EventId { get; set; }

    public DateTime StartDate { get; set; }
    
    public DateTime EndDate { get; set; }

    [DateRange("StartDate", "EndDate", ErrorMessage = "End Date must be greater than or equal to Start Date.")]
    public string EventName { get; set; }
}

এখানে, StartDate এবং EndDate একে অপরের উপর নির্ভরশীল হওয়ায় কাস্টম ভ্যালিডেশন লাগানো হয়েছে।


4. Client-side Validation Integration

ASP.NET Core এ, আপনি কাস্টম ভ্যালিডেশন শুধুমাত্র সার্ভার সাইডে নয়, বরং Client-side Validation সাথেও একত্রে ব্যবহার করতে পারেন। এটি jQuery Validation বা Unobtrusive Validation ব্যবহার করে করা যেতে পারে।

উদাহরণ: ক্লায়েন্ট সাইডে কাস্টম ভ্যালিডেশন অ্যাট্রিবিউট যোগ করা:

<input type="text" id="age" name="age" data-val="true" data-val-minage="Age must be at least 18" />

এখানে, data-val-minage ব্যবহার করে কাস্টম ভ্যালিডেশন মেসেজ যুক্ত করা হয়েছে।


সারাংশ

Custom Validation Rules তৈরি করার মাধ্যমে আপনি আপনার মডেলগুলিতে প্রোগ্রাম্যাটিক্যালি বিশেষ শর্ত প্রয়োগ করতে পারবেন, যা ডেটার সঠিকতা নিশ্চিত করে এবং ইউজারের ভুল ইনপুট থেকে নিরাপত্তা প্রদান করে। Data Annotations এবং Fluent API ব্যবহার করে আপনি খুব সহজেই কাস্টম ভ্যালিডেশন যুক্ত করতে পারেন এবং প্রয়োজনে ক্লায়েন্ট-সাইড ভ্যালিডেশনও ইন্টিগ্রেট করতে পারেন।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion